<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <p data-lake-id="u0437193d" id="u0437193d"><span data-lake-id="ub19f1885" id="ub19f1885">Lombok是一款非常实用Java工具，可用来帮助开发人员消除Java的冗长代码，尤其是对于简单的Java对象（POJO）。它通过注释实现这一目的。</span></p>
  <p data-lake-id="u87ccbb59" id="u87ccbb59"><span data-lake-id="u2496f3a3" id="u2496f3a3">​</span><br></p>
  <p data-lake-id="u02f327bc" id="u02f327bc"><span data-lake-id="u5bee2308" id="u5bee2308">如果大家对于Lombok比较了解的话，可以先跳过这一段，直接往后看，如果不是很熟悉的话，可以简单了解一下。</span></p>
  <p data-lake-id="u2bb05331" id="u2bb05331"><span data-lake-id="u9f47e16e" id="u9f47e16e">​</span><br></p>
  <p data-lake-id="u9feb4227" id="u9feb4227"><span data-lake-id="u7567dfe2" id="u7567dfe2">想在项目中使用Lombok，需要三个步骤：</span></p>
  <p data-lake-id="u778d65b4" id="u778d65b4"><span data-lake-id="ufa3b293b" id="ufa3b293b">​</span><br></p>
  <p data-lake-id="u5c1e7164" id="u5c1e7164"><strong><span data-lake-id="uedfd4ce7" id="uedfd4ce7">一、IDE中安装Lombok插件</span></strong></p>
  <p data-lake-id="u1c3d0f3f" id="u1c3d0f3f"><span data-lake-id="u6ee1c592" id="u6ee1c592">​</span><br></p>
  <p data-lake-id="uda4d1fd8" id="uda4d1fd8"><span data-lake-id="u00eb15c5" id="u00eb15c5">目前Lombok支持多种IDE，其中包括主流的Eclips、Intellji IDEA、Myeclipse等都是支持的。</span></p>
  <p data-lake-id="u90958554" id="u90958554"><span data-lake-id="u20aee5fc" id="u20aee5fc">在IDEA中安装方式如下:</span></p>
  <p data-lake-id="ubbc98ec7" id="ubbc98ec7"><img src="https://cdn.nlark.com/yuque/0/2023/jpeg/5378072/1698667430096-6dec78ea-8ec2-4b57-9be4-fef6fa50a5f9.jpeg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_23%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ub3753085" id="ub3753085"><span data-lake-id="u3c11290e" id="u3c11290e">​</span><br></p>
  <p data-lake-id="u6e2a4a44" id="u6e2a4a44"><strong><span data-lake-id="u2f7bf861" id="u2f7bf861">二、导入相关依赖</span></strong></p>
  <p data-lake-id="u2c4a694c" id="u2c4a694c"><strong><span data-lake-id="ue040629e" id="ue040629e">​</span></strong><br></p>
  <p data-lake-id="u7c366704" id="u7c366704"><span data-lake-id="u5f122a67" id="u5f122a67">Lombok 支持使用多重构建工具进行导入依赖，目前主要支持maven、gardle、ant等均支持。</span></p>
  <p data-lake-id="u9c6973ad" id="u9c6973ad"><span data-lake-id="u3714ae42" id="u3714ae42">如使用maven导入方式如下：</span></p>
  <pre lang="java"><code>
&lt;dependency&gt;
    &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
    &lt;artifactId&gt;lombok&lt;/artifactId&gt;
    &lt;version&gt;1.18.12&lt;/version&gt;
    &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
</code></pre>
  <p data-lake-id="u24c9612a" id="u24c9612a"><span data-lake-id="uabd16265" id="uabd16265">​</span><br></p>
  <p data-lake-id="ud1200b3d" id="ud1200b3d"><strong><span data-lake-id="ud87f433d" id="ud87f433d">三、代码中使用注解</span></strong></p>
  <p data-lake-id="ud1ecc048" id="ud1ecc048"><span data-lake-id="u8594de23" id="u8594de23">Lombok精简代码的方式主要是通过注解来实现，其中常用的有@Data、@Getter/@Setter、@Builder、@NonNull等。</span></p>
  <p data-lake-id="u24a78700" id="u24a78700"><span data-lake-id="u5d7db492" id="u5d7db492">如使用@Data注解，即可简单的定义一个Java Bean：</span></p>
  <pre lang="java"><code>
import lombok.Data;
@Data
public class Menu {
    private String shopId;
    private String skuMenuId;
    private String skuName;
}
</code></pre>
  <p data-lake-id="u789c993c" id="u789c993c"><span data-lake-id="u365e6ad2" id="u365e6ad2">​</span><br></p>
  <p data-lake-id="u74614f4f" id="u74614f4f"><span data-lake-id="u26ad8ee9" id="u26ad8ee9">使用@Data注解在类上，相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解，对于POJO类十分有用。</span></p>
  <p data-lake-id="u77103a31" id="u77103a31"><span data-lake-id="ua8f37c01" id="ua8f37c01">​</span><br></p>
  <p data-lake-id="ucb523914" id="ucb523914"><span data-lake-id="u8382b020" id="u8382b020">即自动帮忙给例子中的Menu类中定义了toString、Getter、Setter等方法。</span></p>
  <p data-lake-id="ua041360d" id="ua041360d"><span data-lake-id="u78c23057" id="u78c23057">​</span><br></p>
  <p data-lake-id="ua478cd22" id="ua478cd22"><span data-lake-id="u51d32250" id="u51d32250">通过上面的例子，大家可以发现，我们是好用@Data注解大大减少了代码量，使代码非常简洁。这也是很多开发者热衷于使用Lombok的主要原因。</span></p>
  <p data-lake-id="u50740032" id="u50740032"><span data-lake-id="ue6498e2d" id="ue6498e2d">​</span><br></p>
  <p data-lake-id="ube3e9dcf" id="ube3e9dcf"><strong><span data-lake-id="u14828e91" id="u14828e91">另外，关于Lombok的使用，不同人有不同的看法，因为很多人都使用过Lombok，对于他的优点都比较了解，所以接下来我们重点说一下Lombok的使用会带来哪些问题。</span></strong></p>
  <h3 data-lake-id="es9na" id="es9na"><span data-lake-id="u479d4c61" id="u479d4c61">Lombok有什么坏处？</span></h3>
  <h4 data-lake-id="BHJqo" id="BHJqo"><span data-lake-id="ud789dad9" id="ud789dad9">强X队友</span></h4>
  <p data-lake-id="ua8681382" id="ua8681382"><span data-lake-id="u72d0271e" id="u72d0271e">因为Lombok的使用要求开发者一定要在IDE中安装对应的插件。</span></p>
  <p data-lake-id="uf4cc6e6e" id="uf4cc6e6e"><span data-lake-id="u17651948" id="u17651948">​</span><br></p>
  <p data-lake-id="u33c7f518" id="u33c7f518"><span data-lake-id="u8969b488" id="u8969b488">如果未安装插件的话，使用IDE打开一个基于Lombok的项目的话会提示找不到方法等错误。导致项目编译失败。</span></p>
  <p data-lake-id="uc03a4ed5" id="uc03a4ed5"><span data-lake-id="u59026ea1" id="u59026ea1">​</span><br></p>
  <p data-lake-id="u0b23ec1d" id="u0b23ec1d"><span data-lake-id="u45540b7e" id="u45540b7e">也就是说，如果项目组中有一个人使用了Lombok，那么其他人就必须也要安装IDE插件。否则就没办法协同开发。</span></p>
  <p data-lake-id="ua4875072" id="ua4875072"><span data-lake-id="ub901ecd4" id="ub901ecd4">​</span><br></p>
  <p data-lake-id="u88e2985b" id="u88e2985b"><span data-lake-id="u969042ea" id="u969042ea">更重要的是，如果我们定义的一个jar包中使用了Lombok，那么就要求所有依赖这个jar包的所有应用都必须安装插件，这种侵入性是很高的。</span></p>
  <p data-lake-id="ud08ae63d" id="ud08ae63d"><span data-lake-id="u16492314" id="u16492314">​</span><br></p>
  <h4 data-lake-id="r4Mrs" id="r4Mrs"><span data-lake-id="u86822e15" id="u86822e15">代码可读性，可调试性低</span></h4>
  <p data-lake-id="u81168dd7" id="u81168dd7"><br></p>
  <p data-lake-id="u32225d5c" id="u32225d5c"><span data-lake-id="uc77b7930" id="uc77b7930">在代码中使用了Lombok，确实可以帮忙减少很多代码，因为Lombok会帮忙自动生成很多代码。</span></p>
  <p data-lake-id="u519bae76" id="u519bae76"><span data-lake-id="uefaf1560" id="uefaf1560">​</span><br></p>
  <p data-lake-id="u9b7f43d4" id="u9b7f43d4"><span data-lake-id="u7916ed00" id="u7916ed00">但是这些代码是要在编译阶段才会生成的，所以在开发的过程中，其实很多代码其实是缺失的。</span></p>
  <p data-lake-id="u1351fa25" id="u1351fa25"><span data-lake-id="u1d39ca1a" id="u1d39ca1a">​</span><br></p>
  <p data-lake-id="ue47e209e" id="ue47e209e"><span data-lake-id="ufaa2d455" id="ufaa2d455">在代码中大量使用Lombok，就导致代码的可读性会低很多，而且也会给代码调试带来一定的问题。</span></p>
  <p data-lake-id="ue6d5056e" id="ue6d5056e"><span data-lake-id="ub4ecf0ef" id="ub4ecf0ef">​</span><br></p>
  <p data-lake-id="u541fde32" id="u541fde32"><span data-lake-id="u98b75553" id="u98b75553">比如，我们想要知道某个类中的某个属性的getter方法都被哪些类引用的话，就没那么简单了。</span></p>
  <p data-lake-id="ucf20a6d1" id="ucf20a6d1"><br></p>
  <h4 data-lake-id="lJt6N" id="lJt6N"><span data-lake-id="u92d0eadd" id="u92d0eadd">有坑</span></h4>
  <p data-lake-id="u61d68532" id="u61d68532"><span data-lake-id="u81e1f410" id="u81e1f410">因为Lombok使代码开发非常简便，这就使得部分开发者对其产生过度依赖。</span></p>
  <p data-lake-id="uc631194b" id="uc631194b"><span data-lake-id="uf0c48ccc" id="uf0c48ccc">​</span><br></p>
  <p data-lake-id="uba7f986a" id="uba7f986a"><span data-lake-id="uda5a6bd4" id="uda5a6bd4">在使用Lombok过程中，如果对于各种注解的底层原理不理解的话，很容易产生意想不到的结果。</span></p>
  <p data-lake-id="u25878c3b" id="u25878c3b"><span data-lake-id="u3223dbfc" id="u3223dbfc">​</span><br></p>
  <p data-lake-id="u82ef29dc" id="u82ef29dc"><span data-lake-id="uaf93382b" id="uaf93382b">举一个简单的例子，我们知道，当我们使用@Data定义一个类的时候，会自动帮我们生成equals()方法 。</span></p>
  <p data-lake-id="u3883a776" id="u3883a776"><span data-lake-id="u2c9e2bbb" id="u2c9e2bbb">​</span><br></p>
  <p data-lake-id="u6200b67c" id="u6200b67c"><span data-lake-id="ub690e327" id="ub690e327">但是如果只使用了@Data，而不使用@EqualsAndHashCode(callSuper=true)的话，会默认是</span></p>
  <p data-lake-id="u4d4b51e0" id="u4d4b51e0"><span data-lake-id="udce21a73" id="udce21a73">@EqualsAndHashCode(callSuper=false),这时候生成的equals()方法只会比较子类的属性，不会考虑从父类继承的属性，无论父类属性访问权限是否开放。</span></p>
  <p data-lake-id="u1a43d101" id="u1a43d101"><span data-lake-id="u33af4d87" id="u33af4d87">​</span><br></p>
  <p data-lake-id="udd1b749c" id="udd1b749c"><span data-lake-id="u8c4bb86c" id="u8c4bb86c">这就可能得到意想不到的结果。</span></p>
  <p data-lake-id="u452d7938" id="u452d7938"><span data-lake-id="ud3bcde45" id="ud3bcde45">​</span><br></p>
  <h4 data-lake-id="b4sDW" id="b4sDW"><span data-lake-id="ue4528dd1" id="ue4528dd1">影响升级</span></h4>
  <p data-lake-id="u83fab55c" id="u83fab55c"><br></p>
  <p data-lake-id="ud03ff48d" id="ud03ff48d"><span data-lake-id="ua6eeb41f" id="ua6eeb41f">因为Lombok对于代码有很强的侵入性，就可能带来一个比较大的问题，那就是会影响我们对JDK的升级。</span></p>
  <p data-lake-id="u2734820e" id="u2734820e"><span data-lake-id="ud718c56f" id="ud718c56f">​</span><br></p>
  <p data-lake-id="ua94bc422" id="ua94bc422"><span data-lake-id="u2ef05283" id="u2ef05283">按照如今JDK的升级频率，每半年都会推出一个新的版本，但是Lombok作为一个第三方工具，并且是由开源团队维护的，那么他的迭代速度是无法保证的。</span></p>
  <p data-lake-id="ua64551a9" id="ua64551a9"><span data-lake-id="ud578d71e" id="ud578d71e">​</span><br></p>
  <p data-lake-id="u88a9483f" id="u88a9483f"><span data-lake-id="u55e881e5" id="u55e881e5">所以，如果我们需要升级到某个新版本的JDK的时候，若其中的特性在Lombok中不支持的话就会受到影响。</span></p>
  <p data-lake-id="u612ab3ab" id="u612ab3ab"><span data-lake-id="udb3d00da" id="udb3d00da">还有一个可能带来的问题，就是Lombok自身的升级也会受到限制。</span></p>
  <p data-lake-id="uc264a0ff" id="uc264a0ff"><span data-lake-id="ua7a42a34" id="ua7a42a34">​</span><br></p>
  <p data-lake-id="u96bdb602" id="u96bdb602"><span data-lake-id="u18ab108b" id="u18ab108b">因为一个应用可能依赖了多个jar包，而每个jar包可能又要依赖不同版本的Lombok，这就导致在应用中需要做版本仲裁，而我们知道，jar包版本仲裁是没那么容易的，而且发生问题的概率也很高。</span></p>
  <p data-lake-id="u86d293d9" id="u86d293d9"><span data-lake-id="u1214521d" id="u1214521d">​</span><br></p>
  <h4 data-lake-id="Jis9Q" id="Jis9Q"><span data-lake-id="uc72d4d1d" id="uc72d4d1d">破坏封装性</span></h4>
  <p data-lake-id="u943b8086" id="u943b8086"><span data-lake-id="ubb513e5e" id="ubb513e5e">以上几个问题，我认为都是有办法可以避免的。但是有些人排斥使用Lombok还有一个重要的原因，那就是他会破坏封装性。</span></p>
  <p data-lake-id="u5310adc9" id="u5310adc9"><span data-lake-id="ud75b3798" id="ud75b3798">​</span><br></p>
  <p data-lake-id="u25d4c020" id="u25d4c020"><span data-lake-id="u3a7ae2fc" id="u3a7ae2fc">众所周知，Java的三大特性包括封装性、继承性和多态性。</span></p>
  <p data-lake-id="ud21766c4" id="ud21766c4"><span data-lake-id="u88064cc5" id="u88064cc5">​</span><br></p>
  <p data-lake-id="uf6dc6fba" id="uf6dc6fba"><span data-lake-id="u79fd1ebf" id="u79fd1ebf">如果我们在代码中直接使用Lombok，那么他会自动帮我们生成getter、setter 等方法，这就意味着，一个类中的所有参数都自动提供了设置和读取方法。</span></p>
  <p data-lake-id="u6bb35107" id="u6bb35107"><span data-lake-id="ud7531301" id="ud7531301">​</span><br></p>
  <p data-lake-id="u241b2d91" id="u241b2d91"><span data-lake-id="ue0dabb68" id="ue0dabb68">举个简单的例子，我们定义一个购物车类：</span></p>
  <pre lang="java"><code>
@Data
public class ShoppingCart { 
    //商品数目
    private int itemsCount; 
    //总价格
    private double totalPrice; 
    //商品明细
    private List items = new ArrayList&lt;&gt;();
}
//例子来源于《极客时间-设计模式之美》
</code></pre>
  <p data-lake-id="u38fc48bc" id="u38fc48bc"><span data-lake-id="ua988dde1" id="ua988dde1">我们知道，购物车中商品数目、商品明细以及总价格三者之前其实是有关联关系的，如果需要修改的话是要一起修改的。</span></p>
  <p data-lake-id="u308280c6" id="u308280c6"><span data-lake-id="ube815692" id="ube815692">​</span><br></p>
  <p data-lake-id="u1f87531e" id="u1f87531e"><span data-lake-id="uaa5c7df2" id="uaa5c7df2">但是，我们使用了Lombok的@Data注解，对于itemsCount 和 totalPrice这两个属性。虽然我们将它们定义成 private 类型，但是提供了 public 的 getter、setter 方法。</span></p>
  <p data-lake-id="u03069a6f" id="u03069a6f"><span data-lake-id="u5bd3499a" id="u5bd3499a">​</span><br></p>
  <p data-lake-id="ue48b432e" id="ue48b432e"><span data-lake-id="ude43402f" id="ude43402f">外部可以通过 setter 方法随意地修改这两个属性的值。我们可以随意调用 setter 方法，来重新设置 itemsCount、totalPrice 属性的值，这也会导致其跟 items 属性的值不一致。</span></p>
  <p data-lake-id="u933b2ae2" id="u933b2ae2"><span data-lake-id="ub6e68680" id="ub6e68680">​</span><br></p>
  <p data-lake-id="uf4d01825" id="uf4d01825"><span data-lake-id="u11651f2a" id="u11651f2a">而面向对象封装的定义是：通过访问权限控制，隐藏内部数据，外部仅能通过类提供的有限的接口访问、修改内部数据。所以，暴露不应该暴露的 setter 方法，明显违反了面向对象的封装特性。</span></p>
  <p data-lake-id="uefacbb61" id="uefacbb61"><span data-lake-id="u6df1d0f6" id="u6df1d0f6">​</span><br></p>
  <p data-lake-id="u6cf7f60b" id="u6cf7f60b"><span data-lake-id="u9fe22657" id="u9fe22657">好的做法应该是不提供getter/setter，而是只提供一个public的addItem方法，同时去修改itemsCount、totalPrice以及items三个属性。</span></p>
  <p data-lake-id="u76322c07" id="u76322c07"><span data-lake-id="u0a0d0393" id="u0a0d0393">​</span><br></p>
  <h3 data-lake-id="v40PA" id="v40PA"><span data-lake-id="u5792be70" id="u5792be70">总结</span></h3>
  <p data-lake-id="u7395bd8d" id="u7395bd8d"><br></p>
  <p data-lake-id="u1ee21726" id="u1ee21726"><span data-lake-id="ubd4fd6d1" id="ubd4fd6d1">本文总结了常用的Java开发工具Lombok的优缺点。</span></p>
  <p data-lake-id="uda3cfcb5" id="uda3cfcb5"><span data-lake-id="uf1426931" id="uf1426931">​</span><br></p>
  <p data-lake-id="ufd6cab4d" id="ufd6cab4d"><span data-lake-id="u4e3ff5cb" id="u4e3ff5cb">优点是使用注解即可帮忙自动生成代码，大大减少了代码量，使代码非常简洁。</span></p>
  <p data-lake-id="ubfac2820" id="ubfac2820"><span data-lake-id="u3eba5448" id="u3eba5448">​</span><br></p>
  <p data-lake-id="u4ee0b232" id="u4ee0b232"><span data-lake-id="u9c657506" id="u9c657506">但是并不意味着Lombok的使用没有任何问题，在使用Lombok的过程中，还可能存在对队友不友好、对代码不友好、对调试不友好、对升级不友好等问题。</span></p>
  <p data-lake-id="ud8e6c0e6" id="ud8e6c0e6"><span data-lake-id="ubda974b1" id="ubda974b1">​</span><br></p>
  <p data-lake-id="ua9d56faf" id="ua9d56faf"><span data-lake-id="uf0eafef9" id="uf0eafef9">最重要的是，使用Lombok还会导致破坏封装性的问题。</span></p>
  <p data-lake-id="u82f00d6f" id="u82f00d6f"><span data-lake-id="u1766ea71" id="u1766ea71">​</span><br></p>
  <p data-lake-id="u3f5e505f" id="u3f5e505f"><span data-lake-id="uaa6a9cd0" id="uaa6a9cd0">虽然使用Lombok存在着很多方便，但是也带来了一些问题。</span></p>
  <p data-lake-id="u1969cd4a" id="u1969cd4a"><span data-lake-id="uacafe7af" id="uacafe7af">​</span><br></p>
  <p data-lake-id="ube8836e9" id="ube8836e9"><strong><span data-lake-id="u83df1342" id="u83df1342">但是到底建不建议在日常开发中使用，我其实保持一个中立的态度，不建议大家过度依赖，也不要求大家一定要彻底不用。</span></strong></p>
  <p data-lake-id="ub373f0c0" id="ub373f0c0"><span data-lake-id="u00e77b86" id="u00e77b86">​</span><br></p>
  <p data-lake-id="ub176e69a" id="ub176e69a"><span data-lake-id="uf21a35bb" id="uf21a35bb">只要大家在使用的过程中，或者评估要不要在代码中引入Lombok之前，在想到他的优点的同时，能够考虑到他给代码带来的问题的，那么本文的目的也就达到了！</span></p>
  <p data-lake-id="u36a982aa" id="u36a982aa"><span data-lake-id="ueae68622" id="ueae68622">​</span><br></p>
  <p data-lake-id="u0ed3b24f" id="u0ed3b24f"><span data-lake-id="u027bedf9" id="u027bedf9">​</span><br></p>
  <h3 data-lake-id="q97yc" id="q97yc"><span data-lake-id="u2f7e1009" id="u2f7e1009">Java出手</span></h3>
  <p data-lake-id="u6237583b" id="u6237583b"><br></p>
  <p data-lake-id="ufc26bba6" id="ufc26bba6"><span data-lake-id="ua173b96f" id="ua173b96f">其实，lombok主要是帮我们生成Java Bean中的模板代码，在JDK 14中，其实官方自己新出了一个类型，来帮我们定义一个简单的Java Bean</span></p>
  <p data-lake-id="uceab5256" id="uceab5256"><span data-lake-id="u8acb0884" id="u8acb0884">​</span><br></p>
  <p data-lake-id="u0bf718dd" id="u0bf718dd"><span data-lake-id="u72513dea" id="u72513dea">大神Brian Goetz提出了使用record定义一个纯数据载体的想法，于是，Java 14 中便包含了一个新特性：EP 359: Records </span></p>
  <p data-lake-id="uaf1223c7" id="uaf1223c7"><span data-lake-id="uabb4fab8" id="uabb4fab8">​</span><br></p>
  <p data-lake-id="u3f77d9c2" id="u3f77d9c2"><img src="https://cdn.nlark.com/yuque/0/2023/jpeg/5378072/1698667620980-1ac41017-aa1c-4a37-92ad-28520a52815f.jpeg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_13%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u137988fc" id="u137988fc"><span data-lake-id="u28412e0c" id="u28412e0c"><br><br></span></p>
  <p data-lake-id="u35975728" id="u35975728"><span data-lake-id="uae5983b0" id="uae5983b0">Records的目标是扩展Java语言语法，Records为声明类提供了一种紧凑的语法，用于创建一种类中是“字段，只是字段，除了字段什么都没有”的类。通过对类做这样的声明，编译器可以通过自动创建所有方法并让所有字段参与hashCode()等方法。</span></p>
  <p data-lake-id="u338f5a44" id="u338f5a44"><span data-lake-id="ub367427d" id="ub367427d">​</span><br></p>
  <pre lang="java"><code>
record Person (String firstName, String lastName) {}
</code></pre>
  <p data-lake-id="ue66f101b" id="ue66f101b"><br></p>
  <p data-lake-id="ue247a801" id="ue247a801"><span data-lake-id="ua9b83d2f" id="ua9b83d2f">如前所述，Record只是一个类，其目的是保存和公开数据。让我们看看进行反编译，将会得到以下代码:</span></p>
  <p data-lake-id="u686e963a" id="u686e963a"><span data-lake-id="u2781babd" id="u2781babd">​</span><br></p>
  <pre lang="java"><code>
public final class Person extends java.lang.Record {  
  private final String firstName;
  private final String lastName;
  public Person(java.lang.String, java.lang.String);
  public java.lang.String toString();
  public final int hashCode();
  public final boolean equals(java.lang.Object);
  public java.lang.String firstName();
  public java.lang.String lastName();
 }
</code></pre>
  <p data-lake-id="u71ba7fea" id="u71ba7fea"><br></p>
  <p data-lake-id="uecf0efb8" id="uecf0efb8"><br></p>
 </body>
</html>